﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TheBullysStore.Controllers;
using TheBullysStore.Models.ModuloAdministracion.Mantenible;
using System.Data.SqlClient;
using log4net;

namespace TheBullysStore.Models.ModuloAdministracion.Mantenible
{
    public class MantenibleDAO
    {
        private static ILog log = LogManager.GetLogger(typeof(MantenibleDAO));
        public string RegistrarMantenible(MantenibleBean mantenible)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                int tem_estado = 1;
                string commandString;
                
                    if (mantenible.IdAreaComun == 0)
                    {
                    commandString = "INSERT INTO mantenible (Nombre,tipo_mantenible,id_edificio,peso,area,costo,estado) " +
                                           " VALUES ('" + mantenible.Nombre + "','" + mantenible.TipoMantenible + "','" + mantenible.IdEdificio + "','" + mantenible.Peso + "','" + mantenible.Area + "','" + mantenible.Costo + "','" + tem_estado + "')";
                    
                    } else{

                        commandString = "INSERT INTO mantenible (Nombre,tipo_mantenible,id_edificio,idareacomun,peso,area,costo,estado) " +
                                               " VALUES ('" + mantenible.Nombre + "','" + mantenible.TipoMantenible + "','" + mantenible.IdEdificio + "','" + mantenible.IdAreaComun + "','" + mantenible.Peso + "','" + mantenible.Area + "','" + mantenible.Costo + "','" + tem_estado + "')";
                    
                    
                    
                    }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

            mantenible.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }

            return mantenible.Conexion;
        }

        public Boolean ExisteMantenible(MantenibleBean mantenible)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                //??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
                string commandString = "SELECT * FROM mantenible WHERE nombre = '" + mantenible.Nombre + "' AND estado = 1 and id_edificio=" + mantenible.IdEdificio + " ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    dataReader.Close();
                    return true;
                }
                else
                {
                    dataReader.Close();
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("existeEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally {
                sqlCon.Close();
            }
        }
        
        public List<MantenibleBean> ListarMantenible(MantenibleBean mantenible)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<MantenibleBean> listaMantenible = new List<MantenibleBean>();
                double tem_montofin = 999999999;
                double tem_montoinicio = -1;

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "select a.*,b.Nombre,c.nombre_area from mantenible a inner join (select * from edificio where estado=1) b ";
                       commandString+="on b.id_edificio=a.id_edificio  left join (select * from area_comun where estado=1) c on c.id_area_comun=a.idareacomun where a.estado=1";

                if ((mantenible.CostoInicial > 0) && (mantenible.CostoFinal > 0))
                {

                    commandString += " AND a.costo BETWEEN " + mantenible.CostoInicial + ""
                                   + " AND " + mantenible.CostoFinal + "";

                }

                if (mantenible.IdAreaComun > 0)
                {
                    commandString += " AND a.idareacomun = " + mantenible.IdAreaComun + "";
                }

                else if (mantenible.CostoInicial > 0)
                {
                    commandString += " AND a.costo BETWEEN " + mantenible.CostoInicial + ""
                                   + " AND " + tem_montofin + "";

                }
                else if (mantenible.CostoFinal > 0)
                {

                    commandString += " AND a.costo BETWEEN " + tem_montoinicio + ""
                                   + " AND " + mantenible.CostoFinal + "";

                }

                if ((mantenible.PesoInicial > 0) && (mantenible.PesoFinal > 0))
                {

                    commandString += " AND a.peso BETWEEN " + mantenible.PesoInicial + ""
                                   + " AND " + mantenible.PesoFinal + "";

                }
                else if (mantenible.PesoInicial > 0)
                {
                    commandString += " AND a.peso BETWEEN " + mantenible.PesoInicial + ""
                                   + " AND " + tem_montofin + "";

                }
                else if (mantenible.PesoFinal > 0)
                {

                    commandString += " AND a.peso BETWEEN " + tem_montoinicio + ""
                                   + " AND " + mantenible.PesoFinal + "";

                }

                if ((mantenible.AreaInicial > 0) && (mantenible.AreaFinal > 0))
                {

                    commandString += " AND a.area BETWEEN " + mantenible.AreaInicial + ""
                                   + " AND " + mantenible.AreaFinal + "";

                }
                else if (mantenible.AreaInicial > 0)
                {
                    commandString += " AND a.area BETWEEN " + mantenible.AreaInicial + ""
                                   + " AND " + tem_montofin + "";

                }
                else if (mantenible.AreaFinal > 0)
                {

                    commandString += " AND a.area BETWEEN " + tem_montoinicio + ""
                                   + " AND " + mantenible.AreaFinal + "";

                }

                if (mantenible.IdEdificio > 0)
                {
                    commandString += " AND a.Id_edificio = " + mantenible.IdEdificio + "";
                }

                if (!string.IsNullOrEmpty(mantenible.Nombre))
                {
                    commandString += " AND a.nombre LIKE '%" + mantenible.Nombre + "%'";
                }

                if (!string.IsNullOrEmpty(mantenible.TipoMantenible))
                {
                    commandString += " AND tipo_mantenible = '" + mantenible.TipoMantenible + "'";
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    MantenibleBean Mantenible = new MantenibleBean();
                    Mantenible.Nombre = Convert.ToString(dataReader[2]);
                    Mantenible.IdMantenible = Convert.ToInt32(dataReader[0]);
                    Mantenible.IdEdificio = Convert.ToInt32(dataReader[6]);
                    Mantenible.Area = Convert.ToDouble(dataReader[4]);
                    Mantenible.Costo = Convert.ToDouble(dataReader[1]);
                    Mantenible.Peso = Convert.ToDouble(dataReader[3]);
                    Mantenible.NombreEdificio = Convert.ToString(dataReader[9]);
                    Mantenible.Estado = Convert.ToInt32(dataReader[5]);
                    Mantenible.TipoMantenible = Convert.ToString(dataReader[7]);
                    if (Convert.IsDBNull(dataReader[8]))
                    {

                        Mantenible.IdAreaComun = 0;
                        Mantenible.NombreArea = "-----";
                    }
                    else { 
                        Mantenible.IdAreaComun = Convert.ToInt32(dataReader[8]);
                        Mantenible.NombreArea = Convert.ToString(dataReader[10]);
                    }

                    listaMantenible.Add(Mantenible);
                }
                dataReader.Close();
                

                return listaMantenible;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }

        public List<MantenibleBean> ListarMantenibleEdificio(MantenibleBean mantenible)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<MantenibleBean> listaMantenible = new List<MantenibleBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM mantenible where estado=1 and Id_Edificio = " + mantenible.IdEdificio.ToString();

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    MantenibleBean Mantenible = new MantenibleBean();
                    Mantenible.Nombre = Convert.ToString(dataReader["Nombre"]);
                    Mantenible.IdMantenible = Convert.ToInt32(dataReader["Id_mantenible"]);
                    Mantenible.IdEdificio = Convert.ToInt32(dataReader["Id_edificio"]);
                    listaMantenible.Add(Mantenible);
                }
                dataReader.Close();

                return listaMantenible;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }



        public List<MantenibleBean> ListarMantenibleMiguel(MantenibleBean mantenible)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<MantenibleBean> listaMantenible = new List<MantenibleBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT m.id_mantenible, m.Nombre, m.id_Edificio, m.tipo_mantenible, a.nombre_area " +
                                       "FROM mantenible m, area_comun a " +
                                       "WHERE m.Estado = 1 AND m.idAreaComun = a.id_area_comun ";

                if (mantenible.IdAreaComun > 0)
                {
                    commandString += " AND a.id_area_comun = " + mantenible.IdAreaComun;
                }

                if (mantenible.IdEdificio > 0)
                {
                    commandString += " AND m.id_edificio = " + mantenible.IdEdificio;
                }

                if (!string.IsNullOrEmpty(mantenible.TipoMantenible))
                {
                    if (mantenible.TipoMantenible == "1")
                        commandString += " AND tipo_mantenible = 'Activo'";
                    else commandString += " AND tipo_mantenible = 'No Activo'";
                }

                System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + commandString);

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    MantenibleBean Mantenible = new MantenibleBean();
                    Mantenible.Nombre = Convert.ToString(dataReader["Nombre"]);
                    Mantenible.IdMantenible = Convert.ToInt32(dataReader["id_mantenible"]);
                    Mantenible.IdEdificio = Convert.ToInt32(dataReader["id_Edificio"]);
                    Mantenible.TipoMantenible = Convert.ToString(dataReader["tipo_mantenible"]);
                    Mantenible.NombreArea = Convert.ToString(dataReader["nombre_area"]);
                    listaMantenible.Add(Mantenible);
                }
                dataReader.Close();

                return listaMantenible;
            }
            catch (Exception ex)
            {
                log.Error("listarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }

        public string ModificarMantenible(MantenibleBean mantenible)//////////////////////////////////////////////////////////////////////////////
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                
                string commandString;

                if (mantenible.IdAreaComun == 0)
                {

                    commandString = "UPDATE mantenible SET " +
                                                      "peso = '" + mantenible.Peso + "' , " +
                                                      "area = '" + mantenible.Area + "' , " +
                                                      "costo = '" + mantenible.Costo + "' , " +
                                                      "tipo_mantenible = '" + mantenible.TipoMantenible + "' , " +
                                                      "idareacomun =  null  , " +
                                                      "id_edificio = '" + mantenible.IdEdificio + "' " +
                                                      "WHERE estado=1 and Nombre = '" + mantenible.Nombre + "'";
                }
                else
                {
                    commandString = "UPDATE mantenible SET " +
                                                  "peso = '" + mantenible.Peso + "' , " +
                                                  "area = '" + mantenible.Area + "' , " +
                                                  "costo = '" + mantenible.Costo + "' , " +
                                                  "tipo_mantenible = '" + mantenible.TipoMantenible + "' , " +
                                                  "idareacomun = '" + mantenible.IdAreaComun + "' , " +
                                                  "id_edificio = '" + mantenible.IdEdificio + "' " +
                                                  "WHERE estado=1 and Nombre = '" + mantenible.Nombre + "'";

                }
                

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);


                sqlCmd.ExecuteNonQuery();


                

                mantenible.Conexion = "Bien";

            }
            catch (Exception ex)
            {
                log.Error("ModificarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
            return mantenible.Conexion;
        }

        public string EliminarMantenible(MantenibleBean mantenible)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                int elim_estado = 0;


                string commandString = "UPDATE mantenible SET " +
                                       "estado = '" + elim_estado + "'" +
                                       "WHERE Nombre = '" + mantenible.Nombre + "'";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                mantenible.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("EliminarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
            return mantenible.Conexion;
        }
    }
}